package br.com.lambdacore.lang.reflect.mirror.matcher;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import net.vidageek.mirror.dsl.Matcher;
import br.com.lambdacore.lang.reflect.mirror.matcher.impl.AccessibleObjectMatcherAnnotationPresent;

public class AccessibleObjectMatcher {

	private AccessibleObjectMatcher() {
	}

	public static <T> Matcher<Constructor<T>> isConstructorAnnotationPresent(
			final Class<? extends Annotation>... annotationClass) {
		return new AccessibleObjectMatcherAnnotationPresent<Constructor<T>>(
				annotationClass);
	}

	public static Matcher<Field> isFieldAnnotationPresent(
			final Class<? extends Annotation>... annotationClass) {
		return new AccessibleObjectMatcherAnnotationPresent<Field>(
				annotationClass);
	}

	public static Matcher<Method> isMethodAnnotationPresent(
			final Class<? extends Annotation>... annotationClass) {
		return new AccessibleObjectMatcherAnnotationPresent<Method>(
				annotationClass);
	}

}
